home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
cmln0785.arc
/
CROSSTH.LTG
next >
Wrap
Text File
|
1986-02-27
|
7KB
|
219 lines
CrossThoughts - July 1985
Listinτ 1«
PP╠ codσ fo≥ searchinτ iε ß B½ tree
---------------------------------------------------------B½ tree
-- DAT┴ TYP┼ DECLARATION¼ Pasca∞ style
Leaf_Reπ ╜ RECORD
Leaf_Left¼ Leaf_Right¼ Count_Leaf_Key║ INTEGER
Leaf_Ke∙ ║ ARRAY[1..MAX_KEY+1▌ O╞ Key_Data
Leaf_Pt≥ ║ ARRAY[1..MAX_KEY+1▌ O╞ INTEGER
EN─ RECORD
Node_Rec = RECORD
Count_Node_Key : INTEGER
Node_Key : ARRAY[1..MAX_KEY+1] OF Key_Data
Node_Ptr : ARRAY[1..MAX_KEY+1] OF INTEGER
END RECORD
-- VARIABLE DECLARATION
Leaf : Leaf_Rec
Node : Node_Rec
ROOT, HEIGHT, MAX_KEY, NUM_PAGE : INTEGER
PROCEDURE Search(Soughtkey : Key_Data
ROOT, HEIGHT : INTEGER
VAR Found : BOOLEAN
VAR SoughtLeaf, Sought_Loc : INTEGER
VAR Leaf : Leaf_Rec)
-- Search procedure for B+ tree
Found = FALSE
IF HEIGHT > 0 THEN
INITIALIZE: None
LOOP
-- loop will conduct gradual descent in B+ tree
BEGIN IF HEIGHT <= 1 THEN EXIT END IF
READ "B+TREE_Key_File",ROOT,Node
SearchNode(SoughtKey,Node,Found,Sought_Loc)
ROOT = Node.Node_Ptr[Sought_Loc]
HEIGHT -= 1
END LOOP
TERMINATE: SoughtLeaf = ROOT
READ "B+TREE_Key_File",SoughtLeaf,Leaf
SearchLeaf(SoughtKey,Leaf,Found,Sought_Loc)
END IF
END Search
è-------------------------------------------------------------------
PROCEDURE SearchNode(SoughtKey : Key_Data;
Node : Node_Rec;
VAR Found : BOOLEAN;
VAR Sought_Loc : INTEGER)
BEGIN
IF SoughtKey < Node.Node_Key[1]
THEN
Found = FALSE
Sought_Loc = 1
ELSE
INTIALIZE: Sought_Loc = Node.Count_Node_Key
LOOP
BEGIN IF (SoughtKey >= Node.Node_Key[Sought_Loc]) OR
(Sought_Loc <= 1) THEN EXIT END IF
Sought_Loc -= 1
END LOOP
TERMINATE: Found = (SoughtKey = Node.Node_Key[Sought_Loc])
END IF
END SearchNode
Listing 2.
PPL code for searching in a B++ tree
-------------------------------------------------------B++ tree
-- DATA TYPE DECLARATION, Pascal style
Leaf_Rec = RECORD
Leaf_Left, Leaf_Right, Count_Leaf_Key, Node_Above : INTEGER
Leaf_Key : ARRAY[1..MAX_KEY+1] OF Key_Data
Leaf_Ptr : ARRAY[1..MAX_KEY+1] OF INTEGER
END RECORD
Node_Rec = RECORD
Count_Node_Key, Parent_Node : INTEGER
Node_Key : ARRAY[1..MAX_KEY+1] OF Key_Data
Node_Ptr, ZoomPtr : ARRAY[1..MAX_KEY+1] OF INTEGER
END RECORD
-- VARIABLE DECLARATION
Leaf : Leaf_Rec
Node : Node_Rec
ROOT, HEIGHT, MAX_KEY, NUM_PAGE : INTEGER
-------------------------------------------------------------------
èPROCEDURE Search(Soughtkey : Key_Data
ROOT, HEIGHT : INTEGER
VAR Found : BOOLEAN
VAR SoughtLeaf, Sought_Loc : INTEGER
VAR Leaf : Leaf_Rec)
Found = FALSE
IF HEIGHT > 0 THEN
INITIALIZE: None
LOOP
BEGIN IF HEIGHT <= 1 THEN EXIT END IF
READ #2,ROOT,Node
SearchNode(SoughtKey,Node,Found,Sought_Loc)
IF Found THEN HEIGHT = 1; ROOT = Node.Zoom_Ptr[Sought_Loc]
ELSE HEIGHT -= 1; ROOT = Node.Node_Ptr[Sought_Loc]
END LOOP
TERMINATE: SoughtLeaf = ROOT
READ #2,SoughtLeaf,Leaf
IF NOT Found THEN SearchLeaf(SoughtKey,Leaf,Found,Sought_Loc)
ELSE Sought_Loc = MAX_KEY + 1
END IF
END Search
-- Procedures SearchNode and SearchLeaf are identical to those used
-- with the B+ tree.
Listing 3.
PPL code for a heuristic statistical system.
PROGRAM SMART_SYSTEM
-- Program to study the best model to correlate observed
-- variables X and Y. The models used are of the following
-- general type:
-- f(Y) = intercept + slope g(X)
-- where f(Y) is some function of variable Y.
-- where g(X) is some function of variable X.
-- Performance history file contains the following information
-- MAX_MODEL : the maximum number of models compared
-- Remaining_Models : The number of remaining models
-- MAP(): A string containing MAX_MODEL characters to map the status
-- of each model. If position i has "Y" then the model is
-- still considered. Otherwise it is disqualified.
-- Model records composed of the following:
-- Sum_R2 : Sum of the coefficient of determination values
-- Sum_Sqr_R2 : Sum of the squares of the coefficient of
-- determination values
-- Model_Name : A string containing the model name.
è-- N is the number of data sets processed
-- X() and Y() are the arrays for the observations.
BEGIN
Read performance history file
IF Remaining_Models = 1 THEN DISPLAY "One model, program stopped"
Halt program
END IF
Read observed data file
N += 1
INITIALIZE: None
LOOP <Model>
BEGIN For Model = 1 TO MAX_MODEL
INITIALIZE: Set statistical summations to zero
i = 1
LOOP <Data>
BEGIN IF (i > Num_Data) OR (MAP(Model) <> "Y")
THEN EXIT <Data> END IF
CASE i OF
WHEN 1 => Xreg = X(i); Yreg = Y(i) -- Linear model
WHEN 2 => Xreg = Ln(X(i)); Yreg = Y(i) -- Exponential model
WHEN 3 => Xreg = X(i); Yreg = Ln(Y(i)) -- Logarithmic model
WHEN 4 => Xreg = Ln(X(i); Yreg = Ln(Y(i)) -- Power model
END CASE
Update summations with values of Xreg and Yreg
i += 1
END LOOP <Data>
TERMINATE: None
Calculate Slope, intercept and coefficient of determination, R2
Sum_R2 += R2; Sum_Sqr_R2 += R2 * R2
END LOOP <Model>
IF N > 3 THEN
Best = index of model with highest average R2 value.
INITIALIZE: Display "Best model is";Model_Name(Best)
Table_T = "Tabulated" Student-t value calculated
at (N-2) degrees of freedom and
selected probability level.
LOOP <Compare>
BEGIN For Model = 1 to MAX_MODEL
IF (Model <> Best) AND (MAP(Model) = "Y") THEN
-- Calculate Student-t statistics
Term1 = Sqrt(2/N)
Term2 = Sqrt((Sum_Sqr_R2(Best) + Sum_Sqr_R2(Model)
- Sqr(Sum_R2(Best))/N - Sqr(Sum_R2(Model))/N)
/ (2 * N - 2))
CalcT = (Sum_R2(Best) - Sum_R2(Model))/(N * Term1 * Term2)
IF ABS(CalcT) > Table_T THEN MAP(Model) = "N"
Remaining_Models -= 1
END IF
END IF
END LOOP <Compare>
TERMINATE: Display all models still in competition
END IFèEND SMART_SYSTEM